package com.redepronik.negosys.invfac.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.IndexColumn;

import com.redepronik.negosys.rrhh.entity.Cliente;
import com.redepronik.negosys.rrhh.entity.Empleadocargo;

/**
 * The persistent class for the egreso database table.
 * 
 */
@Entity
@Table(schema = "invfac", name = "egreso")
@NamedQuery(name = "Egreso.findAll", query = "SELECT e FROM Egreso e")
public class Egreso implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "EGRESO_EGRESOID_GENERATOR", sequenceName = "INVFAC.EGRESO_EGRESOID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EGRESO_EGRESOID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Long egresoid;

	@Column(nullable = false)
	private Boolean activo;

	@Column(length = 10)
	private String autorizacionanulacion;

	// bi-directional many-to-one association to cliente
	@ManyToOne
	@JoinColumn(name = "clientefacturaid")
	private Cliente clienteFactura;

	// bi-directional many-to-one association to cliente
	@ManyToOne
	@JoinColumn(name = "clienteid")
	private Cliente cliente;

	@Column(nullable = false, length = 25)
	private String codigodocumento;

	@Column(nullable = false, precision = 20, scale = 10)
	private BigDecimal descuento;

	@Column(nullable = false)
	private Boolean devolucion;

	// bi-directional many-to-one association to empleadoCargo
	@ManyToOne
	@JoinColumn(name = "vendedorid")
	private Empleadocargo vendedorid;

	// bi-directional many-to-one association to empleadoCargo
	@ManyToOne
	@JoinColumn(name = "cajeroid")
	private Empleadocargo cajeroid;

	@Column(nullable = false)
	private Boolean facturainterna;

	private Timestamp fechacierre;

	@Column(nullable = false)
	private Timestamp fechainicio;

	private Long padre;

	@Column(nullable = false)
	private Boolean pagado;

	// bi-directional many-to-one association to Credito
	@OneToOne(cascade = CascadeType.ALL, mappedBy = "egreso")
	private Credito credito;

	// bi-directional many-to-one association to Detalleegreso
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "egreso")
	@IndexColumn(name = "orden", base = 1)
	private List<Detalleegreso> detalleegresos;

	// bi-directional many-to-one association to Local
	@ManyToOne
	@JoinColumn(name = "localid", nullable = false)
	private Local local;

	// bi-directional many-to-one association to Tipodocumento
	@ManyToOne
	@JoinColumn(name = "tipodocumentoid", nullable = false)
	private Tipodocumento tipodocumento;

	// bi-directional many-to-one association to Entrada
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "egreso")
	private List<Entrada> entradas;

	// bi-directional many-to-one association to Local
	@ManyToOne
	@JoinColumn(name = "guiaremisionid", nullable = false)
	private Guiaremision guiaremision;

	public Egreso() {
	}

	public Detalleegreso addDetalleegreso(Detalleegreso detalleegreso) {
		getDetalleegresos().add(detalleegreso);
		detalleegreso.setEgreso(this);

		return detalleegreso;
	}

	public Entrada addEntrada(Entrada entrada) {
		getEntradas().add(entrada);
		entrada.setEgreso(this);

		return entrada;
	}

	public Boolean getActivo() {
		return this.activo;
	}

	public String getAutorizacionanulacion() {
		return this.autorizacionanulacion;
	}

	public Empleadocargo getCajeroid() {
		return cajeroid;
	}

	public Cliente getCliente() {
		return this.cliente;
	}

	public Cliente getClienteFactura() {
		return this.clienteFactura;
	}

	public String getCodigodocumento() {
		return this.codigodocumento;
	}

	public Credito getCredito() {
		return this.credito;
	}

	public BigDecimal getDescuento() {
		return descuento;
	}

	public List<Detalleegreso> getDetalleegresos() {
		return this.detalleegresos;
	}

	public Boolean getDevolucion() {
		return this.devolucion;
	}

	public Long getEgresoid() {
		return this.egresoid;
	}

	public List<Entrada> getEntradas() {
		return this.entradas;
	}

	public Boolean getFacturainterna() {
		return this.facturainterna;
	}

	public Timestamp getFechacierre() {
		return this.fechacierre;
	}

	public Timestamp getFechainicio() {
		return this.fechainicio;
	}

	public Guiaremision getGuiaremision() {
		return guiaremision;
	}

	public Local getLocal() {
		return this.local;
	}

	public Long getPadre() {
		return this.padre;
	}

	public Boolean getPagado() {
		return this.pagado;
	}

	public Tipodocumento getTipodocumento() {
		return this.tipodocumento;
	}

	public Empleadocargo getVendedorid() {
		return vendedorid;
	}

	public Detalleegreso removeDetalleegreso(Detalleegreso detalleegreso) {
		getDetalleegresos().remove(detalleegreso);
		detalleegreso.setEgreso(null);

		return detalleegreso;
	}

	public Entrada removeEntrada(Entrada entrada) {
		getEntradas().remove(entrada);
		entrada.setEgreso(null);

		return entrada;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	public void setAutorizacionanulacion(String autorizacionanulacion) {
		this.autorizacionanulacion = autorizacionanulacion;
	}

	public void setCajeroid(Empleadocargo cajeroid) {
		this.cajeroid = cajeroid;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public void setClienteFactura(Cliente clienteFactura) {
		this.clienteFactura = clienteFactura;
	}

	public void setCodigodocumento(String codigodocumento) {
		this.codigodocumento = codigodocumento;
	}

	public void setCredito(Credito credito) {
		this.credito = credito;
	}

	public void setDescuento(BigDecimal descuento) {
		this.descuento = descuento;
	}

	public void setDetalleegresos(List<Detalleegreso> detalleegresos) {
		this.detalleegresos = detalleegresos;
	}

	public void setDevolucion(Boolean devolucion) {
		this.devolucion = devolucion;
	}

	public void setEgresoid(Long egresoid) {
		this.egresoid = egresoid;
	}

	public void setEntradas(List<Entrada> entradas) {
		this.entradas = entradas;
	}

	public void setFacturainterna(Boolean facturainterna) {
		this.facturainterna = facturainterna;
	}

	public void setFechacierre(Timestamp fechacierre) {
		this.fechacierre = fechacierre;
	}

	public void setFechainicio(Timestamp fechainicio) {
		this.fechainicio = fechainicio;
	}

	public void setGuiaremision(Guiaremision guiaremision) {
		this.guiaremision = guiaremision;
	}

	public void setLocal(Local local) {
		this.local = local;
	}

	public void setPadre(Long padre) {
		this.padre = padre;
	}

	public void setPagado(Boolean pagado) {
		this.pagado = pagado;
	}

	public void setTipodocumento(Tipodocumento tipodocumento) {
		this.tipodocumento = tipodocumento;
	}

	public void setVendedorid(Empleadocargo vendedorid) {
		this.vendedorid = vendedorid;
	}

}